package com.common.platform.base.consts;

import com.common.platform.base.enums.CommonStatus;
import com.common.platform.base.utils.CoreUtil;
import com.sun.mail.imap.protocol.BODY;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


import static com.common.platform.base.consts.ConfigConstant.SYSTEM_CONSTANT_PREFIX;
@Slf4j
public class ConstantsContext {

    private static final String TIPS_END=",若想忽略此提示，请在开发管理->系统配置->参数配置，设置相关参数！";

    /**
     * 所有常量
     */
    private static Map<String ,Object> CONSTNS_HOLDER=new ConcurrentHashMap<>();

    /**
     * 添加常量
     */

    public static void putConstant(String key,Object value){
        if(CoreUtil.isOneEmpty(key,value)){
            return;
        }
        CONSTNS_HOLDER.put(key, value) ;
    }

    /**
     * 删除常量
     */
    public static void deleteConstant(String key){
        if(CoreUtil.isOneEmpty(key)){
            return;
        }
        if(!key.startsWith(SYSTEM_CONSTANT_PREFIX)){
            CONSTNS_HOLDER.remove(key);

        }
    }
    /**
     * 获取系统常量
     */
    public static Map<String ,Object> getonstantsMap(){
        return CONSTNS_HOLDER;
    }

    /**
     * 获取验证码开关
     */
    public static Boolean getKaptchaOpen(){
        String commonPlarformKaptchaOpen=(String) CONSTNS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"KAPTCHA_OPEN");
        if (CommonStatus.ENABLE.getCode().equalsIgnoreCase(commonPlarformKaptchaOpen)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     *获取管理系统名称
     */
    public static String getSystemName(){
        String systemName = (String) CONSTNS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"SYSTEM_NAME");
        if (CoreUtil.isEmpty(systemName)) {
            log.error("管理系统名称不存在！常量名称："+SYSTEM_CONSTANT_PREFIX+"SYSTEM_NAME"+"!采用默认名称:通用快速后台"+TIPS_END);
            return "通用快速后台";
        } else {
            return systemName;
        }
    }

    /**
     * 获取管理系统默认密码
     */
    public static String getDefaultPassword() {
        String defaultPassword = (String) CONSTNS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"DEFAULT_PASSWORD");
        if (CoreUtil.isEmpty(defaultPassword)) {
            log.error("管理系统默认密码不存在！常量名称："+SYSTEM_CONSTANT_PREFIX+"DEFAULT_PASSWORD"+"!使用默认密码:111111"+TIPS_END);
            return "111111";
        } else {
            return defaultPassword;
        }
    }

    /**
     * 获取管理系统OAUTH2用户前缀
     */
    public static String getOAuth2UserPrefix() {
        String oauth2Prefix = (String) CONSTNS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"OAUTH2_PREFIX");
        if (CoreUtil.isEmpty(oauth2Prefix)) {
            log.error("管理系统OAUTH2用户前缀不存在！常量名称："+SYSTEM_CONSTANT_PREFIX+"OAUTH2_PREFIX"+"!使用默认前缀:oauth2"+TIPS_END);
            return "oauth2";
        } else {
            return oauth2Prefix;
        }
    }


    /**
     * 获取管理系统顶部导航条是否开启
     */
    public static Boolean getDefaultAdvert() {
        String defaultAdvert = (String) CONSTNS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"DEFAULT_ADVERT");
        if (CoreUtil.isEmpty(defaultAdvert)) {
            log.error("管理系统顶部导航条开启不存在！常量名称："+SYSTEM_CONSTANT_PREFIX+"DEFAULT_ADVERT"+"!使用默认:true"+TIPS_END);
            return true;
        } else {
            if(CommonStatus.ENABLE.getCode().equalsIgnoreCase(defaultAdvert)){
                return true;
            }else {
                return false;
            }

        }
    }

    /**
     * 获取系统发布的版本号（防止css和js的缓存）
     */
    public static String getReleaseVersion() {
        String releaseVersion = (String) CONSTNS_HOLDER.get(SYSTEM_CONSTANT_PREFIX+"RELEASE_VERSION");
        if (CoreUtil.isEmpty(releaseVersion)) {
            log.error("管理系统发布的版本号不存在！常量名称："+SYSTEM_CONSTANT_PREFIX+"RELEASE_VERSION"+"!使用默认:随机数"+TIPS_END);
            return CoreUtil.getRandomString(8);
        } else {
            return releaseVersion;
        }
    }











}
